// CommonJS 规范，Koa 中间件
module.exports = () => {
    // 导出一个 Koa 中间件
    return async (ctx, next) => {
        // 使用 ctx 可以拿到请求、响应相关的信息
        // 然后就可以来写逻辑了
        // ...
        // 常用的 ctx 的 API 有哪些？
        // 路由定义是：router.get('/users/:id', controller.user.detail)
        // 比如请求：GET  http://localhost:70001/users/3?like=abc&name=li
        // ctx.method  =>  获取请求方式  => 对应上面的 GET 请求
        // ctx.path  =>  获取请求路径  =>  对应上面的 /users/3
        // ctx.url  =>  获取请求 url  =>  对应上面的 /users/3?like=abc&name=li
        // ctx.params  =>  获取请求的路径参数  =>  { id: 3 }
        // ctx.query  =>  获取查询参数  =>  { like: 'abc', name: 'li' }
        // ctx.request.body  =>  获取请求体参数
        // ctx.headers  =>  获取请求头信息 => 它是一个对象，包含键值对信息
        // ctx.body =>  获取或者设置响应体信息，响应给浏览器

        // 除查询接口以外的其他接口
        if (ctx.method === 'GET') {
            await next();
            // 其他请求方式都需要校验
        } else {
            // 在请求头中获取 ”egg-token” 字段，当 egg-token=”admin” 时，
            // 中间件允许接口继续执行响应数据，
            // 否则阻止请求并且 response={msg:“无权限”, status:401}
            const token = ctx.headers['egg-token'];
            if (token === 'admin') {
                await next();
            } else {
                ctx.body = { msg: '无权限', status: 401 };
                return;
            }
        }
    };
};
